
// 要求：实现动态的给数组添加元素效果，实现对数组扩容
//  1)原始数组使用静态分配int[]arr={1,2,3}
//  2)增加的元素4，直接放在数组的最后arr={1,2,3,4}
//  3)用户可以通过如下方法来决定是否继续添加，添加成功，是否继续？yes/no
import java.util.Scanner;
//对于Java中的数组要有一定的理解，java中数组之间是赋值，可以理解成地址赋值，若两个数组之间赋值，改变其中一方的值，另一方的值也会改变
//对于Java中，jvm的内存有栈区，堆区，方法区，数组创建时，会在栈区创建一个地址，堆区也会开辟空间给数组存储堆中的空间个数是该地址（数组）所包含的元素个数
//数组的拷贝，是复制被拷贝的数组的地址，其所指向也是被拷贝数组的堆区，其中一方改变，另一方也将改变
public class Main{
    public static void main(String[] args){
        int[] arr = {1,2,3};
        String ways;//事先声明变量，否则进入do-while循环中，提示变量未声明
        Scanner myscanner = new Scanner(System.in);
        do{
            int[] arr2 = new int[arr.length+1];//将此放入循环中，让其每一次添加数组就扩大一个位置
            for(int i=0;i<arr.length;i++){//遍历数组
                //将数组arr中的元素拷贝给arr2,此时arr2[3]的的值为0
                arr2[i] = arr[i];
            }
            System.out.println("请输入你所要添加的元素");
            int NewElement = myscanner.nextInt();
            arr2[arr2.length-1] = NewElement;
            arr=arr2;//再将数组arr2的地址拷贝给arr
            System.out.println("----数组arr扩容后的效果----");
            for(int i=0;i<arr.length;i++){
                System.out.print(arr[i]+"\t");
            }
            System.out.println("");
            System.out.println("添加成功，是否继续添加 (yes/no)!");
            ways = myscanner.next();
            if(!ways.equalsIgnoreCase("no")&&!ways.equalsIgnoreCase("yes")){
                System.out.println("输入错误，请重新输入");
                continue;//结束本次循环，直接进入下一次循环，避免程序继续进行下去，造成逻辑混乱
            }
        }while(!ways.equalsIgnoreCase("no"));

        myscanner.close();//关闭Scanners
        System.out.println("程序结束");
    }
}